/*
Communicate Thales/Magellan serial protocol.
- Copyright (C) 2002, 2003, 2004, 2005 Robert Lipe, robertlipe@usa.net
+ Copyright (C) 2002, 2003, 2004, 2005, 2006 Robert Lipe, robertlipe@usa.net
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
static int bitrate = 4800;
static int wptcmtcnt;
static int wptcmtcnt_max;
+static int explorist;
#define MYNAME "MAGPROTO"
#define MAXCMTCT 200
*/
typedef struct mag_rte_head {
queue Q; /* Queue head for child rte_elems */
+ char *rte_name;
int nelems;
} mag_rte_head;
magfile_in = xfopen(portname, "rb", MYNAME);
- is_file = !isatty(fileno(magfile_in));
+ is_file = !isatty(fileno(magfile_in)) || explorist;
if (is_file) {
icon_mapping = map330_icon_table;
mag_cleanse = m330_cleanse;
};
static void
-mag_rd_init(const char *portname)
+mag_rd_init_common(const char *portname)
{
time_t now, later;
waypoint_read_count = 0;
return;
}
+static void
+mag_rd_init(const char *portname)
+{
+ explorist = 0;
+ mag_rd_init_common(portname);
+}
+
+static void
+magX_rd_init(const char *portname)
+{
+ explorist = 1;
+ mag_rd_init_common(portname);
+}
+
static void
mag_wr_init_common(const char *portname)
{
}
#else
magfile_out = xfopen(portname, "w+b", MYNAME);
- is_file = !isatty(fileno(magfile_out));
+ is_file = !isatty(fileno(magfile_out)) || explorist;
#endif
if (!mkshort_handle) {
magX_wr_init(const char *portname)
{
wpt_len = 20;
+ explorist = 1;
mag_wr_init_common(portname);
setshort_length(mkshort_handle, wpt_len);
setshort_whitespace_ok(mkshort_handle, 1);
static void
mag_wr_init(const char *portname)
{
+ explorist = 0;
wpt_len = 8;
mag_wr_init_common(portname);
/*
static mag_rte_head *mag_rte_head;
mag_rte_elem *rte_elem;
char *p;
+ char *rte_name;
descr[0] = 0;
-
+#if 0
sscanf(rtemsg,"$PMGNRTE,%d,%d,%c,%d%n",
&frags,&frag,xbuf,&rtenum,&n);
+#else
+ sscanf(rtemsg,"$PMGNRTE,%d,%d,%c,%d%n",
+ &frags,&frag,xbuf,&rtenum,&n);
+
+ /* Explorist has a route name here */
+ if (explorist) {
+ char rten[1024];
+ int n2;
+ sscanf(rtemsg + n, ",%[^,]%n", rten, &n2);
+ n += n2;
+ rte_name = xstrdup(rten);
+ }
+
+#endif
/*
* This is the first component of a route. Allocate a new
rte_head = route_head_alloc();
route_add_head(rte_head);
rte_head->rte_num = rtenum;
+ rte_head->rte_name = xstrdup(rte_name);
/*
* It is quite feasible that we have 200 waypoints,
if ((tmp == &rte->waypoint_list) || ((i % 2) == 0)) {
thisline++;
-
- sprintf(obuff, "PMGNRTE,%d,%d,c,%d,%s,%s",
+ char expbuf[1024];
+ expbuf[0] = 0;
+ if (explorist) {
+ snprintf(expbuf, sizeof(expbuf), "%s,",
+ rte->rte_name ? rte->rte_name : "");
+ }
+ sprintf(obuff, "PMGNRTE,%d,%d,c,%d,%s%s,%s",
numlines, thisline,
rte->rte_num ? rte->rte_num : route_out_count,
+ expbuf,
buff1, buff2);
mag_writemsg(obuff);
ff_vecs_t magX_fvecs = {
ff_type_file,
FF_CAP_RW_ALL,
- mag_rd_init,
+ magX_rd_init,
magX_wr_init,
mag_deinit,
mag_deinit,
--- /dev/null
+$PMGNWPL,3408.881,N,11750.002,W,0000356,M,WPT006,,a*2D\r
+$PMGNWPL,3403.376,N,11742.897,W,0000273,M,WPT007,,a*25\r
+$PMGNWPL,3401.816,N,11751.349,W,0000226,M,WPT008,,a*2F\r
+$PMGNWPL,3405.686,N,11751.836,W,0000201,M,WPT009,,a*2B\r
+$PMGNRTE,2,1,c,1,Route 1,WPT006,a,WPT007,a*63\r
+$PMGNRTE,2,2,c,1,Route 1,WPT008,a,WPT009,a*60\r